<?php

// 直接アクセスを拒否する
if (!defined("IN_APP")) {
	exit("直接アクセスはできません。");
}

// ログインしていないユーザーを転送する
if (!LOGGED_IN) {
	$_SESSION['message'] = $MESSAGES['ACCESS_FORBIDDEN'];
	header("Location: {$SETTINGS['SCRIPT_PATH']}");
}

// データベースに接続する
$connection = connectToDb();

// リーダーでなければ、終了する
if (!isLeader($connection, $_SESSION['group'], $_SESSION['user_id'])) {
	die("グループ編集が行えるのがリーダーだけです。");
} 

// ユーザーをデータベースのグループに登録する
function enterUserIntoGroup($connection, $groupId, $userId, $screenName) {

	// データベースにユーザーがなかったら、追加する
	if (!userExists($connection, $userId)) {
	
		// データベースにユーザー情報を入れる
		$query = sprintf("INSERT INTO users (user_id, twitter_username) VALUES (%s, '%s')", 
									mysql_real_escape_string($userId),
									mysql_real_escape_string($screenName));
		
		$result = mysql_query($query, $connection);
		
		if (!$result) {
			die('Invalid query: ' . mysql_error());
		}
	}
	
	// 既にgroup_membersに入ってないことを確認する
	$query = sprintf("SELECT * FROM group_members WHERE user_id = %s AND group_id = %s ",
							mysql_real_escape_string($userId),
							mysql_real_escape_string($groupId));
	$query.= "AND (del_flag <> 'd' OR del_flag IS NULL)";
	
	$result = mysql_query($query, $connection);
	
	// なければ、グループメンバーズテーブルに追加する
	if (!$row = mysql_fetch_assoc($result)) {
		$query = sprintf("INSERT INTO group_members (group_id, user_id) VALUES (%s, %s)",
							mysql_real_escape_string($groupId),
							mysql_real_escape_string($userId));
							
		mysql_query($query);
	}
}


//指定したTwitterのユーザーの情報を取得
$userNotFound = false;

// Twitterのアカウント情報を取得し、表示する
if ($_POST["action"] == "account_check") {
	$account = $_POST['account'];
	
	$params = array();
	$params['screen_name'] = $account;

	//usersShow ユーザ情報取得
	try {
		$test = $twitter->get_usersShow($params);
		$info = $test->response;
	//ユーザーが存在しない場合
	} catch (Exception $e) {
		$userNotFound = true;
	}
	
	//検索ユーザーのプロフィール表示
	if (isset($del_error)) {
		echo $MESSAGES['GROUP_EDIT_DELETE_CHECKBOX'];
	} else if ($userNotFound) {
		echo $MESSAGES['GROUP_EDIT_USER_NOT_FOUND'];
	} else {
		//チェックボタンを押したときに実行
		if (isset($info)) {
			echo $info["profile_image_url"] . "|";
		
			//検索したユーザーに自己紹介文があるかないか
			if ($info["description"] != ""){
				echo $info["description"];
			} else {
				echo $MESSAGES['GROUP_EDIT_USER_FOUND_NO_DESC'];
			}
		}
	}
}
// グループにメンバーを追加する(データベースに入れて、ツイッターのリストに追加する)
else if ($_POST["action"] == "account_add") {
	$account = $_POST['account'];

	$params = array();
	$params['screen_name'] = $account;
	
	//usersShow ユーザ情報取得
	try {
		$test = $twitter->get_usersShow($params);
		$info = $test->response;

		$group_name = getGroupName($connection, $_SESSION['group']);
		
		// 追加するユーザーの情報の配列を作成
		$params = array (
			"slug" => $group_name,
			"owner_screen_name" => $_SESSION['twitter_username'], 
			"screen_name" => $info['screen_name']
		);
		
		// ユーザー情報をデータベースに入れる
		enterUserIntoGroup($connection, $_SESSION["group"], $info['id'], $info['screen_name']);
			
		// 追加するユーザーの情報をツイッターに送る
		$response = $twitter->post_listsMembersCreate($params)->response;
		
		if ($response) {
			// 出力を準備する
			$message = $info['screen_name'] . "がグループに追加されました。";

			if (empty($info["description"])) {
				$description = "<span style=\"color:gray;\">";
				$description.= $MESSAGES['GROUP_EDIT_NO_DESCRIPTION'];
				$description.= "</span>";
			}
			else {
				$description = htmlspecialchars($info['description']);
			}
				
			// 出力するメッセージをまとめる
			$output = "success|";
			$output.= "$message|";
			$output.= "{$info['profile_image_url']}|";
			$output.= "{$info['id']}|";
			$output.= "{$info['screen_name']}|";
			$output.= $description;
			
			// 出力する
			echo $output;
		}
		else {
			echo "error|ツイッターにユーザーを追加中にエラーが起こりました。";
		}
		
	//ユーザーが存在しない場合	
	} catch (Exception $e) {
		exit("error|" . $e->getMessage());
		$userShow_error = true;
	}
}
//指定したTwitterのユーザーの情報を取得
else if ($_POST["action"] == "multi_account_add") {
	$accounts = $_POST['account'];
	
	// アカウントのリストを準備する
	$account_list = "";
	foreach ($accounts as $account) {
		$account_list .= $account . ",";
	}
	$account_list = mb_substr($account_list, 0, -1);
	
	$params = array();
	$params['screen_name'] = $account_list;
	
	try {
		// users/lookupで複数のユーザ情報を取得
		$users = $twitter->get_usersLookup($params)->response;

		// グループ名を取得
		$group_name = getGroupName($connection, $_SESSION['group']);
				
		//リストにメンバー追加
		$connection = connectToDb();
		
		// ユーザーを一人ひとりデータベースに入れる
		foreach ($users as $info) {
			enterUserIntoGroup($connection, $_SESSION['group'], $info['id'], $info['screen_name']);
		}
		
		// 追加するユーザーの情報の配列を作成
		$params = array (
			"slug" => $group_name,
			"owner_screen_name" => $_SESSION['twitter_username'], 
			"screen_name" => $account_list
		);
		
		// 追加するユーザーの情報をツイッターに送る
		$response = $twitter->post_listsMembersCreate_all($params)->response;
		
		if ($response) {
			// 出力を準備する
			$message = count($users) . "のユーザーがグループに追加されました。";

			// 出力するメッセージをまとめる
			$output = "success|";
			$output.= "$message\n";
			
			// ユーザー情報をjavascriptに渡す
			foreach ($users as $info) {
				if (empty($info["description"])) {
					$description = "<span style=\"color:gray;\">";
					$description.= $MESSAGES['GROUP_EDIT_NO_DESCRIPTION'];
					$description.= "</span>";
				}
				else {
					$description = htmlspecialchars(str_replace("\n", "", $info['description']));
				}
				
				$output.= "{$info['profile_image_url']}|";
				$output.= "{$info['screen_name']}|";
				$output.= "{$description}\n";
			}
			
			echo $output;
		}
	// 問題が生じた場合、エラーメッセージを表示する
	} catch (Exception $e) {
		exit("error|$e->message");
		$userShow_error = true;
	}
}
// アカウントをグループから外す
else if ($_POST["action"] == "account_remove") {
	$notFoundInDb = false;
	$account = $_POST['account'];
	
	$error = false;
	
	// グループ名を取得
	$group_name = getGroupName($connection, $_SESSION['group']);

	// ユーザー一つずつ削除する
	foreach($account as $del_user) {
	
		// ユーザーが存在する場合
		if (userExists($connection, $del_user)) {
		
			// 自分を削除できないようにする
			if ($del_user == $_SESSION['user_id'])
				continue;
		
			// groupから削除する
			$query = sprintf("UPDATE group_members SET del_flag = 'd' WHERE user_id = %s AND group_id = %s ",
									mysql_real_escape_string($del_user),
									mysql_real_escape_string($_SESSION["group"]));
			$query.= "AND (del_flag <> 'd' OR del_flag IS NULL)";
			
			mysql_query($query, $connection);

			/*
			// 既にgroup_membersに入ってないことを確認する
			$query = sprintf("SELECT * FROM group_members WHERE user_id = %s AND group_id = %s ",
							mysql_real_escape_string($del_user),
							mysql_real_escape_string($_SESSION["group"]));
			$query.= "AND (del_flag <> 'd' OR del_flag IS NULL)";
									
			$result = mysql_query($query, $connection);
			$row = mysql_fetch_assoc($result);
			
			// ユーザーが入ってた唯一のリストだったなおプロフィールがなければ、アカウントを削除する
			if (!$row) {
				$query = sprintf("SELECT * FROM users WHERE user_id = %s ",
								mysql_real_escape_string($del_user));
				$query.= "AND (del_flag <> 'd' OR del_flag IS NULL)";
								
				$result = mysql_query($query, $connection);
				$row = mysql_fetch_assoc($result);
				
				if (empty($row['name']) || empty($row['email']) || empty($row['birthdate'])) {
					$query = sprintf("UPDATE users SET del_flag = 'd' WHERE user_id = %s ",
									mysql_real_escape_string($del_user));	
					$query.= "AND (del_flag <> 'd' OR del_flag IS NULL)";
									
					$result = mysql_query($query, $connection);				
				}
			}
			
			*/
			
			// リストから削除
			try {
				$params = array();
				$params['slug'] = $group_name;
				$params['owner_screen_name'] = $_SESSION['twitter_username'];
				$params['user_id'] = $del_user;
				
				$lists_Members_Destroy = $twitter->post_listsMembersDestroy($params);
			} catch(Exception $e) { }
		}
		else {
			$error = $MESSAGES['GROUP_EDIT_DELETE_NOTFOUND'];
		}
	}
	
	// メッセージを表示する
	if (!$error)
		echo "success|" . $MESSAGES['GROUP_EDIT_DELETE_SUCCESS'];
	else
		echo "error|" . $error;
}

// データベースの接続を切断する
mysql_close($connection);
	
// 処理を終了する
exit();

?>